From 967d7a84e5cab2858d023d4fa8e6a654cab7d961 Mon Sep 17 00:00:00 2001 From: "cl349@firebug.cl.cam.ac.uk" Date: Wed, 14 Sep 2005 18:24:25 +0000 Subject: [PATCH] Add gather function and robustify class methods' failure handling. Signed-off-by: Christian Limpach --- tools/python/xen/xend/xenstore/xstransact.py | 52 ++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tools/python/xen/xend/xenstore/xstransact.py b/tools/python/xen/xend/xenstore/xstransact.py index d52f87045c..950262c924 100644 --- a/tools/python/xen/xend/xenstore/xstransact.py +++ b/tools/python/xen/xend/xenstore/xstransact.py @@ -106,6 +106,23 @@ class xstransact: ret.extend(self._list(key)) return ret + def gather(self, *args): + ret = [] + for tup in args: + if len(tup) == 2: + (key, fn) = tup + defval = None + else: + (key, fn, defval) = tup + try: + val = fn(self.read(key)) + except TypeError: + val = defval + ret.append(val) + if len(ret) == 1: + return ret[0] + return ret + def Read(cls, path, *args): while True: @@ -115,10 +132,14 @@ class xstransact: t.commit() return v except RuntimeError, ex: + t.abort() if ex.args[0] == errno.ETIMEDOUT: pass else: raise + except: + t.abort() + raise Read = classmethod(Read) @@ -130,10 +151,14 @@ class xstransact: t.commit() return except RuntimeError, ex: + t.abort() if ex.args[0] == errno.ETIMEDOUT: pass else: raise + except: + t.abort() + raise Write = classmethod(Write) @@ -145,10 +170,14 @@ class xstransact: t.commit() return except RuntimeError, ex: + t.abort() if ex.args[0] == errno.ETIMEDOUT: pass else: raise + except: + t.abort() + raise Remove = classmethod(Remove) @@ -160,9 +189,32 @@ class xstransact: t.commit() return v except RuntimeError, ex: + t.abort() if ex.args[0] == errno.ETIMEDOUT: pass else: raise + except: + t.abort() + raise List = classmethod(List) + + def Gather(cls, path, *args): + while True: + try: + t = cls(path) + v = t.gather(*args) + t.commit() + return v + except RuntimeError, ex: + t.abort() + if ex.args[0] == errno.ETIMEDOUT: + pass + else: + raise + except: + t.abort() + raise + + Gather = classmethod(Gather) -- 2.30.2